spring security [Spring&AWS][5-2] 구글 로그인 연동하기 ✅ User 클래스 User 클래스는 사용자 정보를 담당할 도메인이다. domain/user/User.java ✅ Role domain/user/Role.java domain/user/Repository.java 소셜 로그인 등 클라이언트 입장에서 소셜 기능 구현 시 필요한 의존성 OAuth 라이브러리를 이용한 소셜 로그인 설정 코드를 작성해보자. OAuth2 로그인 기능에 대한 여러 설정의... Springspring securityTILOAuth2.0OAuth2.0 [Spring] Spring Security + JWT 로그인 구현 해보기 - 1 (설정, 도메인 생성, 레포 생성) 나는 MySQL 말고 PostgreSQL 사용했다. 다운을 받고 build.gradle을 사용하여 project를 열고 Jackson의 WRITE_DATES_AS_TIMESTAMPS속성은 Java 8 데이터/시간 값을 타임스탬프로 직렬화하는 것을 비활성화하는 데 사용됩니다. 모든 날짜/시간 값은 ISO 날짜/시간 문자열로 직렬화됩니다. 도메인 모델에서 Java 8 데이터/시간 클래스를 사용할... JWTspring securityJWT [Spring Boot] OAuth2 + JWT + React 적용해보리기 오늘 팀원이랑 이야기를 해보다가 우려했던 일이 벌어졌다.. 우려했던 일이란? Jwt 관련 내용은 다음 글에 있습니다. 정보가 너무 많거나 구멍 나있는 부분이 너무나 많았다. 대표적으로 사용되는 서비스로는 Kakao, Google, Facebook, Naver 등이 있다. 대표적으로 3가지 방식이 있다. 프론트 + 백엔드 혼합으로 인증 과정을 수행 React에서는 Next-Auth라는 라이브러... Spring bootJWTspring securityoauth2JWT <Spring Security> Spring Security 주요 아키텍처 이해(1) 스프링 시큐리티는 모든 요청에 대한 인증 및 인가와 같은 보안 처리를 필터 기반으로 처리하고 있는데, 필터에서도 스프링의 기술(스프링 빈)을 사용하고 싶은 요구사항이 있다. 하지만, 서블릿 필터와 스프링 빈 간에 호출하고 사용해야 하는 경우가 생기는 데, 이 때 서블릿 필터는 DelegatingFilterProxy 클래스를 사용해서 스프링 빈에게 요청을 위임하고 그 결과 스프링 빈에서 구현한... DelegatingFilterProxyFilterChainProxySpringspring securitySecurityContextSpring bootauthenticationDelegatingFilterProxy [Spring] Spring Security + JWT 로그인 구현해보기 - 3 (회원가입, 로그인 api 작성) 이제 필요한 모든 보안 구성이 완료되었습니다. 드디어 로그인 및 가입 API를 작성할 시간입니다. 그러나 API를 정의하기 전에 API가 사용할 요청 및 응답 페이로드(DTO)를 정의해야 합니다. 먼저 이러한 페이로드를 정의해보겠습니다. payload혹은 dto 패키지를 생성해주세요 ~ 그안에 작성하겠습니다. 1. 로그인 요청 (Request) 2. 회원 가입 요청 (Request) 응답 R... JWTspring securityJWT <Spring Security> DB 연동 인증 처리 build.gradle는 다음과 같다. Spring Security 5.0 이전에는 기본 PasswordEncoder가 평문을 지원하는 NoOpPasswordEncoder(현재는 Deprecated 됨) 였다. 여러 개의 PasswordEncoder 유형을 선언한 뒤, 상황에 맞게 선택해서 사용할 수 있도록 지원하는 Encoder이다. 암호화 포맷: {id}encodedPassword 기본 ... AuthenticationProviderAccountContextUserDetailsServicespring securityAccountContext 회원 도메인 개발과 JWT 인증/인가 처리 이번 캡스톤디자인 프로젝트에서 만들게 될 플랫폼 서비스는 기본적으로 회원 도메인이 들어가는 서비스이기에 이에 대한 인증/인가 처리를 유연하게 할 수 있도록 Spring Security를 활용하고자 하였다. 또한 Frontend와 Backend가 분리된 구조로 팀 프로젝트를 진행하기 때문에, 다양한 방법 중 JWT Token 인증/인가 방식으로 회원가입/로그인 로직을 구현하였다. Email(I... 캡스톤디자인JWTspring securityJWT 권한설정과 표현식 설정시 구체적인 경로가 먼저 오고 그보다 큰 범위는 뒤에 오도록 해야함. {noop} : 스프링 암호화 알고리즘 방식중의 하나. 나중에 배움 이렇게 했을 경우, 로그인을 user로 했을 경우, /user 페이지는 접근가능하나, /admin 관련 페이지는 접근 못함. 로그인을 admin으로 했을 경우 모든 페이지에 로그인 가능함. 로그인을 sys로 했을 경우, /user 페이지 접근 못함. /... spring securityspring security 동시 세션 제어, 세션 고정 보호, 세션 정책 동시 접속을 막기 위해 사용자1이 로그인함 -> 세션 생성 사용자2가 로그인함 -> 세션이 생성되면서 이전 세션 만료 설정 사용자1이 링크 접속함 -> 세션 만료 설정이 되어서 만료시킴. 가 왼쪽 그림 사용자1이 로그인함 -> 세션 생성 사용자2가 로그인함 -> 동일한 계정으로 이미 세션이 생성되어있음. -> 인증 실패 대충 세션을 통해서 사용자 쿠키값을 입력해 자동 로그인을 계속할 수 있음... spring securityspring security 번개장터V2-(2) JWT 토큰 1.SecurityContextPersistentFilter 2.LogoutFilter 3.UsernamePasswordAuthenticationFilter 4.DefaultLoginPageGenerationFilter 5.BasicAuthenticationFilter 6.RememberMeAuthenticationFilter 7.AnonymousAuthenticationFilter 8.Se... JWTspring securitySpringJWT Remember Me 인증 필터는 현재 볼 필요성을 느끼지 못해 일단 건너뜀. 익명사용자 인증 필터도 건너뜀.... spring securityspring security formLogin() loginPage() : 로그인페이지 설정이다. 로그인 화면으로 갈때 이 url로 이동한다. defaultSuccessUrl() : 인증 성공을 했을때 이동할 url이다. failureUrl() : 인증을 실패했을때 이동할 url이다. successHandler() : 인증을 성공한 이후 핸들러이다. failureHandler() : 인증을 실패한 이후 핸들러이다. permitAll() : ... spring securityspring security 프로젝트 구성 및 의존성 추가 자바 버전 - 1.6 (난 11함) Maven Dependency - Spring web Security에 대해 알아보는 목적이므로 간단하게 하나 생성한다. 실행했을 경우, 이렇게 접속이 된다. 현재는 외부에 노출되어 접근이 매우 쉬운 상태이다. pom.xml gradle의 경우에는 이렇게 추가하고 다시 실행을 해보면, 이런 식으로 패스워드가 하나 주어진다. 그리고 localhost:8080... spring securityspring security 번개장터V2-(1) 회원가입,로그인 라이징캠프에서 2명이 짝을 지어 서버를 만들었었다. 하지만 여러 사람들의 기준에 맞추기 위해 매우 단순한 형식의 템플릿을 기준으로 하여 조금 더 버전을 높이기 위해 ERD설계 와 기존 서버는 그대로 두고 Spring에 초점을 맞춰 더 다양한 기술을 사용하기 위해 다시 프로젝트를 시작하였다. 1. jdbcTemplete을 모두 JPA로 변경 2. 예외처리 관련 try-catch를 Control... Springspring securitySpring Simple BBS 애플리케이션 배포 #4 지난번 SimpleTodoList 애플리케이션을 진행하면서 적용했던 스프링 시큐리티를 이번에는 MVC 기반 애플리케이션인 SimpleBBS에도 적용하는 것이 주 목적이었는데 확실히 까다로운 부분이 많았지만 결과적으로 잘 적용할 수 있었다. 그리고 인증, 인가도 JWT와 이에 저장된 사용자 정보를 이용했기 때문에 스프링 시큐리티의 로그인, 로그아웃 기능을 별로 활용할 수 없었는데 이번 Simp... Spring Frameworkspring securitySpring Framework Spring Security - 정수원 2일차 5. 인증 API - Logout, LogoutFilter request(/logout) 보내면 Server에서는 세션 무효화, 인증토큰 삭제, 쿠키정보 삭제, 로그인 페이지로 리다이렉트 해줌 LogoutFilter → AntPathRequestMatcher(/logout) 실패시 chain.doFilter → Authentication → SecurityContext → SecurityCo... spring securityspring security [Spring Security] Spring Boot를 이용한 customize Form control Names 이번에는 Form Authentication을 customize 하는 방법에 대해 알아본다. 이전에 작성한 기본 Form Authentication은 여기에서 확인 할 수 있다. Form Authentication의 defualt parameter를 customize 해본다. Spring Security의 form authentication의 기본 파라미터는 다음과 같다. • /login •... spring securityspring security Spring Framework-17 🗄 이번엔 인메모리 방식이 아닌 DB에서 유저를 가져와 인증해봅시다! Spring Security에서는 UserDetailService를 이용하여 유저를 조회합니다. 우리는 이를 구현하는 클래스를 만듭니다. 우리의 username은 email이므로 userMapper가 파라미터로 들어온 email로 유저를 조회하여 반환할 수 있도록 만듭니다. UserDetailService가 반환하는 클래스... spring securitySpring FrameworkSpring Framework [TIL][Spring] spring-security 기존 로그인/로그아웃 재커스터마이징하기 😂 기존에 있던 ajax 방식의 로그인을 살려서 해보려고 했는데,,,, 아무래도 시간이 좀 걸릴 것 같아 그냥 security 방식에 따르기로 했다........8ㅁ8 일단 스프링 시큐리티를 접목해서 구현하는데에 의의가 있으니, 작은 것에 연연하지 않기로...! 참고 : 에러 발생 기존에 있던 main 코드 로그인을 하면 link는 main으로 넘어가는데 화면이 넘어가지 않는 오류가 발생해서... TILspring security프로젝트SpringSpring [TIL][Spring] multipart form 전송시 CSRF 토큰이 null인 경우(Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN') 😅 기존에 만들어 두었던 프로젝트에 spring security를 추가하는 작업 중이기 때문에 순간순간 에러를 맞이 한다.... 다시 한번 과거 나의 이마를 빡빡 때리며,,,,8ㅁ8,,,후,,,괜찮아 할 수 있어... 참고 : 게시글 작성 form의 형태가 multipart 타입이어서인지 글 작성시 Invalid CSRF Token 'null' was found on the request p... TILspring security프로젝트SpringSpring
[Spring&AWS][5-2] 구글 로그인 연동하기 ✅ User 클래스 User 클래스는 사용자 정보를 담당할 도메인이다. domain/user/User.java ✅ Role domain/user/Role.java domain/user/Repository.java 소셜 로그인 등 클라이언트 입장에서 소셜 기능 구현 시 필요한 의존성 OAuth 라이브러리를 이용한 소셜 로그인 설정 코드를 작성해보자. OAuth2 로그인 기능에 대한 여러 설정의... Springspring securityTILOAuth2.0OAuth2.0 [Spring] Spring Security + JWT 로그인 구현 해보기 - 1 (설정, 도메인 생성, 레포 생성) 나는 MySQL 말고 PostgreSQL 사용했다. 다운을 받고 build.gradle을 사용하여 project를 열고 Jackson의 WRITE_DATES_AS_TIMESTAMPS속성은 Java 8 데이터/시간 값을 타임스탬프로 직렬화하는 것을 비활성화하는 데 사용됩니다. 모든 날짜/시간 값은 ISO 날짜/시간 문자열로 직렬화됩니다. 도메인 모델에서 Java 8 데이터/시간 클래스를 사용할... JWTspring securityJWT [Spring Boot] OAuth2 + JWT + React 적용해보리기 오늘 팀원이랑 이야기를 해보다가 우려했던 일이 벌어졌다.. 우려했던 일이란? Jwt 관련 내용은 다음 글에 있습니다. 정보가 너무 많거나 구멍 나있는 부분이 너무나 많았다. 대표적으로 사용되는 서비스로는 Kakao, Google, Facebook, Naver 등이 있다. 대표적으로 3가지 방식이 있다. 프론트 + 백엔드 혼합으로 인증 과정을 수행 React에서는 Next-Auth라는 라이브러... Spring bootJWTspring securityoauth2JWT <Spring Security> Spring Security 주요 아키텍처 이해(1) 스프링 시큐리티는 모든 요청에 대한 인증 및 인가와 같은 보안 처리를 필터 기반으로 처리하고 있는데, 필터에서도 스프링의 기술(스프링 빈)을 사용하고 싶은 요구사항이 있다. 하지만, 서블릿 필터와 스프링 빈 간에 호출하고 사용해야 하는 경우가 생기는 데, 이 때 서블릿 필터는 DelegatingFilterProxy 클래스를 사용해서 스프링 빈에게 요청을 위임하고 그 결과 스프링 빈에서 구현한... DelegatingFilterProxyFilterChainProxySpringspring securitySecurityContextSpring bootauthenticationDelegatingFilterProxy [Spring] Spring Security + JWT 로그인 구현해보기 - 3 (회원가입, 로그인 api 작성) 이제 필요한 모든 보안 구성이 완료되었습니다. 드디어 로그인 및 가입 API를 작성할 시간입니다. 그러나 API를 정의하기 전에 API가 사용할 요청 및 응답 페이로드(DTO)를 정의해야 합니다. 먼저 이러한 페이로드를 정의해보겠습니다. payload혹은 dto 패키지를 생성해주세요 ~ 그안에 작성하겠습니다. 1. 로그인 요청 (Request) 2. 회원 가입 요청 (Request) 응답 R... JWTspring securityJWT <Spring Security> DB 연동 인증 처리 build.gradle는 다음과 같다. Spring Security 5.0 이전에는 기본 PasswordEncoder가 평문을 지원하는 NoOpPasswordEncoder(현재는 Deprecated 됨) 였다. 여러 개의 PasswordEncoder 유형을 선언한 뒤, 상황에 맞게 선택해서 사용할 수 있도록 지원하는 Encoder이다. 암호화 포맷: {id}encodedPassword 기본 ... AuthenticationProviderAccountContextUserDetailsServicespring securityAccountContext 회원 도메인 개발과 JWT 인증/인가 처리 이번 캡스톤디자인 프로젝트에서 만들게 될 플랫폼 서비스는 기본적으로 회원 도메인이 들어가는 서비스이기에 이에 대한 인증/인가 처리를 유연하게 할 수 있도록 Spring Security를 활용하고자 하였다. 또한 Frontend와 Backend가 분리된 구조로 팀 프로젝트를 진행하기 때문에, 다양한 방법 중 JWT Token 인증/인가 방식으로 회원가입/로그인 로직을 구현하였다. Email(I... 캡스톤디자인JWTspring securityJWT 권한설정과 표현식 설정시 구체적인 경로가 먼저 오고 그보다 큰 범위는 뒤에 오도록 해야함. {noop} : 스프링 암호화 알고리즘 방식중의 하나. 나중에 배움 이렇게 했을 경우, 로그인을 user로 했을 경우, /user 페이지는 접근가능하나, /admin 관련 페이지는 접근 못함. 로그인을 admin으로 했을 경우 모든 페이지에 로그인 가능함. 로그인을 sys로 했을 경우, /user 페이지 접근 못함. /... spring securityspring security 동시 세션 제어, 세션 고정 보호, 세션 정책 동시 접속을 막기 위해 사용자1이 로그인함 -> 세션 생성 사용자2가 로그인함 -> 세션이 생성되면서 이전 세션 만료 설정 사용자1이 링크 접속함 -> 세션 만료 설정이 되어서 만료시킴. 가 왼쪽 그림 사용자1이 로그인함 -> 세션 생성 사용자2가 로그인함 -> 동일한 계정으로 이미 세션이 생성되어있음. -> 인증 실패 대충 세션을 통해서 사용자 쿠키값을 입력해 자동 로그인을 계속할 수 있음... spring securityspring security 번개장터V2-(2) JWT 토큰 1.SecurityContextPersistentFilter 2.LogoutFilter 3.UsernamePasswordAuthenticationFilter 4.DefaultLoginPageGenerationFilter 5.BasicAuthenticationFilter 6.RememberMeAuthenticationFilter 7.AnonymousAuthenticationFilter 8.Se... JWTspring securitySpringJWT Remember Me 인증 필터는 현재 볼 필요성을 느끼지 못해 일단 건너뜀. 익명사용자 인증 필터도 건너뜀.... spring securityspring security formLogin() loginPage() : 로그인페이지 설정이다. 로그인 화면으로 갈때 이 url로 이동한다. defaultSuccessUrl() : 인증 성공을 했을때 이동할 url이다. failureUrl() : 인증을 실패했을때 이동할 url이다. successHandler() : 인증을 성공한 이후 핸들러이다. failureHandler() : 인증을 실패한 이후 핸들러이다. permitAll() : ... spring securityspring security 프로젝트 구성 및 의존성 추가 자바 버전 - 1.6 (난 11함) Maven Dependency - Spring web Security에 대해 알아보는 목적이므로 간단하게 하나 생성한다. 실행했을 경우, 이렇게 접속이 된다. 현재는 외부에 노출되어 접근이 매우 쉬운 상태이다. pom.xml gradle의 경우에는 이렇게 추가하고 다시 실행을 해보면, 이런 식으로 패스워드가 하나 주어진다. 그리고 localhost:8080... spring securityspring security 번개장터V2-(1) 회원가입,로그인 라이징캠프에서 2명이 짝을 지어 서버를 만들었었다. 하지만 여러 사람들의 기준에 맞추기 위해 매우 단순한 형식의 템플릿을 기준으로 하여 조금 더 버전을 높이기 위해 ERD설계 와 기존 서버는 그대로 두고 Spring에 초점을 맞춰 더 다양한 기술을 사용하기 위해 다시 프로젝트를 시작하였다. 1. jdbcTemplete을 모두 JPA로 변경 2. 예외처리 관련 try-catch를 Control... Springspring securitySpring Simple BBS 애플리케이션 배포 #4 지난번 SimpleTodoList 애플리케이션을 진행하면서 적용했던 스프링 시큐리티를 이번에는 MVC 기반 애플리케이션인 SimpleBBS에도 적용하는 것이 주 목적이었는데 확실히 까다로운 부분이 많았지만 결과적으로 잘 적용할 수 있었다. 그리고 인증, 인가도 JWT와 이에 저장된 사용자 정보를 이용했기 때문에 스프링 시큐리티의 로그인, 로그아웃 기능을 별로 활용할 수 없었는데 이번 Simp... Spring Frameworkspring securitySpring Framework Spring Security - 정수원 2일차 5. 인증 API - Logout, LogoutFilter request(/logout) 보내면 Server에서는 세션 무효화, 인증토큰 삭제, 쿠키정보 삭제, 로그인 페이지로 리다이렉트 해줌 LogoutFilter → AntPathRequestMatcher(/logout) 실패시 chain.doFilter → Authentication → SecurityContext → SecurityCo... spring securityspring security [Spring Security] Spring Boot를 이용한 customize Form control Names 이번에는 Form Authentication을 customize 하는 방법에 대해 알아본다. 이전에 작성한 기본 Form Authentication은 여기에서 확인 할 수 있다. Form Authentication의 defualt parameter를 customize 해본다. Spring Security의 form authentication의 기본 파라미터는 다음과 같다. • /login •... spring securityspring security Spring Framework-17 🗄 이번엔 인메모리 방식이 아닌 DB에서 유저를 가져와 인증해봅시다! Spring Security에서는 UserDetailService를 이용하여 유저를 조회합니다. 우리는 이를 구현하는 클래스를 만듭니다. 우리의 username은 email이므로 userMapper가 파라미터로 들어온 email로 유저를 조회하여 반환할 수 있도록 만듭니다. UserDetailService가 반환하는 클래스... spring securitySpring FrameworkSpring Framework [TIL][Spring] spring-security 기존 로그인/로그아웃 재커스터마이징하기 😂 기존에 있던 ajax 방식의 로그인을 살려서 해보려고 했는데,,,, 아무래도 시간이 좀 걸릴 것 같아 그냥 security 방식에 따르기로 했다........8ㅁ8 일단 스프링 시큐리티를 접목해서 구현하는데에 의의가 있으니, 작은 것에 연연하지 않기로...! 참고 : 에러 발생 기존에 있던 main 코드 로그인을 하면 link는 main으로 넘어가는데 화면이 넘어가지 않는 오류가 발생해서... TILspring security프로젝트SpringSpring [TIL][Spring] multipart form 전송시 CSRF 토큰이 null인 경우(Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN') 😅 기존에 만들어 두었던 프로젝트에 spring security를 추가하는 작업 중이기 때문에 순간순간 에러를 맞이 한다.... 다시 한번 과거 나의 이마를 빡빡 때리며,,,,8ㅁ8,,,후,,,괜찮아 할 수 있어... 참고 : 게시글 작성 form의 형태가 multipart 타입이어서인지 글 작성시 Invalid CSRF Token 'null' was found on the request p... TILspring security프로젝트SpringSpring